const {promisify} = require('util')
const jwt = require('jsonwebtoken')
const {jwt_secret} = require('../config/default_config')

const promise_sign = promisify(jwt.sign)
const promise_verify = promisify(jwt.verify)


/**
 * 创建JSON Web Token (JWT)
 * 
 * 本函数用于生成JSON Web Token (JWT)，该JWT包含用户信息，并设置了一个小时的过期时间。
 * 使用预定义的jwt_secret对JWT进行签名，确保JWT的安全性。
 * 
 * @param {Object} userinfo - 包含需要放入JWT的用户信息的对象。
 * @returns {String} 返回生成的带签名的JSON Web Token。
 */
const createJWT = async (userinfo) => {
  // 使用提供的用户信息、秘钥和过期时间签发JWT
  const jwt = await promise_sign(userinfo, jwt_secret, { expiresIn: '1h' });
  return jwt;
}

/**
 * 异步函数：验证JWT（JSON Web Token）
 * 
 * 该函数通过使用预定义的JWT密钥，对给定的JWT令牌进行验证。
 * 它返回包含在JWT中的用户信息，如果验证失败，则可能抛出异常。
 * 
 * @param {string} token - 待验证的JWT令牌。
 * @returns {Object} 包含用户信息的对象，如果验证失败，则可能为空或抛出异常。
 */
const verifyJWT = async (token) => {
  // 使用秘钥验证JWT
  const userinfo = await promise_verify(token, jwt_secret);
  return userinfo;
}

module.exports = {
  createJWT,
  verifyJWT
}